home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / uuid.py < prev    next >
Text File  |  2006-05-23  |  2KB  |  61 lines

  1. # Copyright (c) 2003-2006 CORE Security Technologies
  2. #
  3. # This software is provided under under a slightly modified version
  4. # of the Apache Software License. See the accompanying LICENSE file
  5. # for more information.
  6. #
  7. # $Id: uuid.py,v 1.4 2006/05/23 21:19:26 gera Exp $
  8. #
  9. # Description:
  10. #   Generate UUID compliant with http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt.
  11. #   A different, much simpler (not necessarily better) algorithm is used.
  12. #
  13. # Author:
  14. #   Javier Kohen (jkohen)
  15. #
  16.  
  17. import re
  18.  
  19. from random import randrange
  20. from struct import pack, unpack
  21.  
  22. def generate():
  23.     # UHm... crappy Python has an maximum integer of 2**31-1.
  24.     top = (1L<<31)-1
  25.     return pack("IIII", randrange(top), randrange(top), randrange(top), randrange(top))
  26.  
  27. def bin_to_string(uuid):
  28.     uuid1, uuid2, uuid3 = unpack('<LHH', uuid[:8])
  29.     uuid4, uuid5, uuid6 = unpack('>HHL', uuid[8:16])
  30.     return '%08X-%04X-%04X-%04X-%04X%08X' % (uuid1, uuid2, uuid3, uuid4, uuid5, uuid6)
  31.  
  32. def string_to_bin(uuid):
  33.     matches = re.match('([\dA-Fa-f]{8})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})-([\dA-Fa-f]{4})([\dA-Fa-f]{8})', uuid)
  34.     (uuid1, uuid2, uuid3, uuid4, uuid5, uuid6) = map(lambda x: long(x, 16), matches.groups())
  35.     uuid = pack('<LHH', uuid1, uuid2, uuid3)
  36.     uuid += pack('>HHL', uuid4, uuid5, uuid6)
  37.     return uuid
  38.  
  39. def stringver_to_bin(s):
  40.     (maj,min) = s.split('.')
  41.     return pack('<H',int(maj)) + pack('<H',int(min))
  42.  
  43. def uuidtup_to_bin(tup):
  44.     if len(tup) != 2: return
  45.     return string_to_bin(tup[0]) + stringver_to_bin(tup[1])
  46.  
  47. #input: string
  48. #output: tuple (uuid,version) 
  49. #if version is not found in the input string "1.0"  is returned
  50. #example: 
  51. #           "00000000-0000-0000-0000-000000000000 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
  52. #           "10000000-2000-3000-4000-500000000000 version 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
  53. #           "10000000-2000-3000-4000-500000000000 v 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
  54. #           "10000000-2000-3000-4000-500000000000" returns ('00000000-0000-0000-0000-000000000000','1.0') 
  55. def string_to_uuidtup(s):
  56.     g =  re.search("([A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}).*?([0-9]{1,5}\.[0-9]{1,5})",s+" 1.0")
  57.     if g: 
  58.         (u,v) = g.groups()
  59.         return (u,v)
  60.     return
  61.